/* 926. 将字符串翻转到单调递增 */
/**
 * @param {string} s
 * @return {number}
 */

/* dp */
var minFlipsMonoIncr = function (s) {
	const len = s.length
	/* 记录1的个数 */
	let countOf1 = 0
	/*dp[i]: 当前字符翻转为1的最小次数 */
	const dp = new Uint32Array(len)
	for (let i = 0; i < len; i++) {
		if (i === 0) {
			dp[i] = 0
		} else if (s.charAt(i) === '0') {
			/* 
                当前为 0 有两种选择 
                1:将自己的0反转为1
                2:将前面的所有1反转为0
            */
			dp[i] = Math.min(dp[i - 1] + 1, countOf1)
		} else {
			/* 当前为1,与前面相等 */
			dp[i] = dp[i - 1]
		}
		if (s.charAt(i) === '1') {
			countOf1++
		}
	}

	return dp[len - 1]
}
/* 前缀和 */
var minFlipsMonoIncr = function (s) {
	let len = s.length
	let head = s.indexOf('1')
	let one = 0
	let zero = 0
	let ans = 0
	for (let i = head; i < len; i++) {
		if (s[i] === '0') {
			zero++
			if (zero > one) {
				zero = one
			}
			ans = Math.min(zero, one)
		} else {
			one++
		}
	}
	return ans
}
const ans = minFlipsMonoIncr('10011111110010111011')
console.log('ans :>>', ans)
